import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;

public class practise {
    public static void main(String[] args) {
        String str = "abcdefg";
        String ret = leftRotateString(str,2);//cdefgab
        System.out.println(ret);
    }

    //左旋n个字符
    public static String leftRotateString(String str, int k) {
        String head = str.substring(k);
        String rear = str.substring(0,k);
        return head+rear;
    }

    public static void main1(String[] args) {
//        if(isPower(1248)) {
//            System.out.println("yes");
//        } else{
//            System.out.println("no");
//        }

        int[] array = new int[]{2,5,8,4,2,9,5,4,3,3,8,9,1,21,87,21};
        int[] ret = findNumberAppear(array);
        for(int x : ret) {
            System.out.print(x+" ");
        }
    }
    public static boolean isPower(int num) {
        //如何判断一个数是否是2的k次方？这里不需要确定k的值。例如：1是2的0次方，2是2的1次方，4是2的平方，求N是不是2的K次方？

        //解决方法，若一个数是2的倍数，那么其二进制序列有且仅有一个1
        int count = 0;
        while(num!=0) {
            if((num&1)==1) {
                count++;
            }
            num = num>>>1;
        }
        return count==1;
    }

    public static int[] findNumberAppear(int[] array) {
        //一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

        //创建ret、usedSize，其中usedSize用于维护ret中的有效元素个数
        int[] ret = new int[2];
        int usedSize = 0;

        //先将array中的所有元素拷贝到顺序表list当中
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0; i < array.length; i++) {
            list.add(array[i]);
        }

        //创建循环：
        //  每次删除0下标的元素，并使用del记录被删除的值
        //  调用index查找del，若是还存在del则返回正常下标，若是不存在则返回-1
        //  对delIndex进行判断 ？有效 继续删除 ：无效，说明该值只有一个，故将其放入ret数组中
        //  已确定只存在两个单独的数，故当usedSize==2时便可直接返回ret
        while(!list.isEmpty()) {
            int del = list.remove(0);
            int delIndex = list.indexOf(del);
            if(delIndex==-1) {
                ret[usedSize] = del;
                usedSize++;
                if(usedSize==2) {
                    return ret;
                }
            } else {
                list.remove(delIndex);
            }
        }
        return ret;
    }
}
